package com.eduagent.xwqeduagent.api.speechsynthesis.api.exception;

import com.eduagent.xwqeduagent.api.speechsynthesis.api.constant.ErrorCode;

/**
 * 语音合成服务异常
 */
public class SpeechSynthesisException extends RuntimeException {
    private int errorCode;
    private String sid;
    private String detail;

    /**
     * 创建语音合成服务异常
     * @param errorCode 错误码
     * @param message 异常信息
     */
    public SpeechSynthesisException(int errorCode, String message) {
        super(message);
        this.errorCode = errorCode;
        this.detail = message;
    }

    /**
     * 创建语音合成服务异常
     * @param errorCode 错误码
     * @param message 异常信息
     * @param sid 会话ID
     */
    public SpeechSynthesisException(int errorCode, String message, String sid) {
        super(message);
        this.errorCode = errorCode;
        this.sid = sid;
        this.detail = message;
    }

    /**
     * 创建输入参数错误异常
     * @param message 异常信息
     * @return 语音合成服务异常
     */
    public static SpeechSynthesisException inputError(String message) {
        return new SpeechSynthesisException(ErrorCode.INPUT_DATA_INVALID, message);
    }

    /**
     * 创建参数错误异常
     * @param message 异常信息
     * @return 语音合成服务异常
     */
    public static SpeechSynthesisException parameterError(String message) {
        return new SpeechSynthesisException(ErrorCode.PARAMETER_ERROR, message);
    }

    /**
     * 创建授权错误异常
     * @param message 异常信息
     * @return 语音合成服务异常
     */
    public static SpeechSynthesisException authorizationError(String message) {
        return new SpeechSynthesisException(ErrorCode.NO_AUTHORIZATION, message);
    }

    /**
     * 创建引擎错误异常
     * @param message 异常信息
     * @param engineErrno 引擎错误号
     * @return 语音合成服务异常
     */
    public static SpeechSynthesisException engineError(String message, int engineErrno) {
        return new SpeechSynthesisException(ErrorCode.ENGINE_ERROR_BASE + engineErrno, 
                "WrapperInitErr;errno=" + engineErrno + "; " + message);
    }

    public int getErrorCode() {
        return errorCode;
    }

    public String getSid() {
        return sid;
    }

    public String getDetail() {
        return detail;
    }
} 